package com.augurit.gzcgwsp.excelimportexport.service.impl;

import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.dozer.DozerBeanMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.augurit.gzcgwsp.excelimportexport.dao.YwRqQyjyxkRqqxssdjbDao;
import com.augurit.gzcgwsp.excelimportexport.entity.YwRqQyjyxkCyryzkdjb;
import com.augurit.gzcgwsp.excelimportexport.entity.YwRqQyjyxkRqqxssdjb;
import com.augurit.gzcgwsp.excelimportexport.service.IYwRqQyjyxkRqqxssdjbService;
import com.augurit.gzcgwsp.rqqyjyxk.entity.YwRqQyjyxkFinalCyryzkdjb;
import com.augurit.gzcgwsp.rqqyjyxk.entity.YwRqQyjyxkFinalRqqxssdjb;
import com.augurit.gzcgwsp.rqqyjyxk.service.IYwRqQyjyxkFinalRqqxssdjbService;
import com.augurit.gzcgwsp.rqqyjyxk.web.form.YwRqQyjyxkForm;

@Service
@Transactional
public class YwRqQyjyxkRqqxssdjbServiceImpl implements IYwRqQyjyxkRqqxssdjbService {
	
	@Autowired
	YwRqQyjyxkRqqxssdjbDao ywRqQyjyxkRqqxssdjbDao;
	@Autowired
	IYwRqQyjyxkFinalRqqxssdjbService rqqxssService;
	
	/**
	 * 保存 燃气抢险设施登记表
	 * @param ywRqQyjyxkZyaqjsglryzk
	 */
	public void save(YwRqQyjyxkRqqxssdjb ywRqQyjyxkRqqxssdjb) {
		ywRqQyjyxkRqqxssdjbDao.save(ywRqQyjyxkRqqxssdjb);
	}
	
	private YwRqQyjyxkRqqxssdjb get(Long qyid){
	    String hql = "from YwRqQyjyxkRqqxssdjb t where t.qyid = :qyid";
        Map values = new HashMap();
        values.put("qyid", qyid);
        return (YwRqQyjyxkRqqxssdjb)ywRqQyjyxkRqqxssdjbDao.findUnique(hql, values);
	}

	/**
	 * 解析 燃气抢险设施登记表
	 * @param hssfsheet
	 * @param acceptNo
	 * @param qyid
	 * @return
	 */
	public YwRqQyjyxkRqqxssdjb parseRqqxssdjb(HSSFSheet hssfsheet,String acceptNo, Long qyid, String username) {
		
		String qxdmc = null;//抢险队名称
		String fzr = null;//负责人
		String dh = null;//电话
		String qxdrs = null;//抢险队人数
		String qxcl = null;//抢险车辆（辆）
		
		String hql = "from YwRqQyjyxkRqqxssdjb t where t.qyid = "+qyid+"";
			List<YwRqQyjyxkRqqxssdjb> list=ywRqQyjyxkRqqxssdjbDao.find(hql);
			for(int i=0;i<list.size();i++)
			{
				ywRqQyjyxkRqqxssdjbDao.delete(list.get(i));
			}
		
		YwRqQyjyxkRqqxssdjb ywRqQyjyxkRqqxssdjb = new YwRqQyjyxkRqqxssdjb();
 		try { 			
 			HSSFRow hssfrow = hssfsheet.getRow(0);// 第一行 			
 				// 遍历该行所有的行,j表示行数 getPhysicalNumberOfRows行的总数
 				for (int j = 2; j < hssfsheet.getPhysicalNumberOfRows(); j++) {
 					hssfrow = hssfsheet.getRow(j);
 					// 判断是否还存在需要导入的数据
 					if (hssfrow == null) {
 						//System.out.println("这里已没有数据，在第" + i + "列,第" + j + "行");
 						break;
 					}
 					if (j == 2) {//第一行
 						if (hssfrow.getCell((short) 2) == null) {
 							qxdmc = "";
 						} else if (hssfrow.getCell((short) 2).getCellType() == 0) {
 							qxdmc = new Double(hssfrow.getCell((short) 2).getNumericCellValue()).toString();
 						} else {// 如果EXCEL表格中的数据类型为字符串型
 							qxdmc = hssfrow.getCell((short) 2).getStringCellValue().trim();
 						}
 					}
 					if (j == 3) {//第2行
 						if (hssfrow.getCell((short) 2) == null) {
 							fzr = "";
 						} else if (hssfrow.getCell((short) 2).getCellType() == 0) {
 							fzr = new Double(hssfrow.getCell((short) 2).getNumericCellValue()).toString();
 						} else {// 如果EXCEL表格中的数据类型为字符串型
 							fzr = hssfrow.getCell((short) 2).getStringCellValue().trim();
 						}
 						if (hssfrow.getCell((short) 4) == null) {
 							dh = "";
 						} else if (hssfrow.getCell((short) 4).getCellType() == 0) {
 							dh = new Double(hssfrow.getCell((short) 4).getNumericCellValue()).toString();
 						} else {// 如果EXCEL表格中的数据类型为字符串型
 							dh = hssfrow.getCell((short) 4).getStringCellValue().trim();
 						}
 					}
 					if (j == 4) {//第3行
 						if (hssfrow.getCell((short) 2) == null) {
 							qxdrs = "";
 						} else if (hssfrow.getCell((short) 2).getCellType() == 0) {
 							qxdrs = new Double(hssfrow.getCell((short) 2).getNumericCellValue()).toString();
 						} else {// 如果EXCEL表格中的数据类型为字符串型
 							qxdrs = hssfrow.getCell((short) 2).getStringCellValue().trim();
 						}
 						if (hssfrow.getCell((short) 5) == null) {
 							qxcl = "";
 						} else if (hssfrow.getCell((short) 5).getCellType() == 0) {
 							qxcl = new Double(hssfrow.getCell((short) 5).getNumericCellValue()).toString();
 						} else {// 如果EXCEL表格中的数据类型为字符串型
 							qxcl = hssfrow.getCell((short) 5).getStringCellValue().trim();
 						}
 					} 					
 				}
 			
 				ywRqQyjyxkRqqxssdjb.setQyid(qyid);
 		 		ywRqQyjyxkRqqxssdjb.setAcceptNo(acceptNo);
 		 		ywRqQyjyxkRqqxssdjb.setUserName(username);
 		 		ywRqQyjyxkRqqxssdjb.setUploadDate(new Date());
 		 		
 		 		ywRqQyjyxkRqqxssdjb.setQxdmc(qxdmc);
 		 		ywRqQyjyxkRqqxssdjb.setFzr(fzr);
 		 		ywRqQyjyxkRqqxssdjb.setDh(dh);
 		 		ywRqQyjyxkRqqxssdjb.setQxdrs(qxdrs);
 		 		ywRqQyjyxkRqqxssdjb.setQxcl(qxcl);
 		 		this.save(ywRqQyjyxkRqqxssdjb); 			
 		}catch(Exception e){
 			e.printStackTrace();
 		} 		
		return null;
	}

	/**
     * 导出 燃气抢险设施登记表
     * @param hssfsheet
     * @param acceptNo
     * @param qyid
     * @return
     */
    public HSSFSheet expRqqxssdjb(HSSFSheet hssfsheet,String acceptNo, Long qyid, String username,HSSFCellStyle cs,String exptype) {
        if("qyxx".equals(exptype)){
            List<YwRqQyjyxkFinalRqqxssdjb> entitys = rqqxssService.getInfosByQyid(qyid);
            if(entitys!=null && entitys.size()>0){
                YwRqQyjyxkFinalRqqxssdjb entity=entitys.get(0);
                try {
                    if(entity == null) return null;
                    HSSFRow hssfrow = hssfsheet.getRow(0);// 第一行            
                    // 遍历该行所有的行,j表示行数 getPhysicalNumberOfRows行的总数
                    for (int j = 2; j < hssfsheet.getPhysicalNumberOfRows(); j++) {
                        hssfrow = hssfsheet.getRow(j);
                        // 判断是否还存在需要导入的数据
                        if (hssfrow == null) {
                            break;
                        }
                        if(j == 2){
                         //   hssfsheet.addMergedRegion(new Region(2,(short)2,2,(short)5)); // 四个参数分别是：起始行，起始列，结束行，结束列 
                            HSSFCell cell1=hssfrow.createCell((short)2);   //创建一个单元格  HSSFCell类表示单元格  // 四个参数分别是：起始行，起始列，结束行，结束列 
                            cell1.setCellValue(entity.getQxdmc()==null?"":entity.getQxdmc());   //设置单元格内容  
                            cell1.setCellStyle(cs);
                        }
                        if(j == 3){
                            HSSFCell cell2=hssfrow.createCell((short)2);   //创建一个单元格  HSSFCell类表示单元格   
                            cell2.setCellValue(entity.getFzr()==null?"":entity.getFzr());   //设置单元格内容  
                            cell2.setCellStyle(cs);
                            
                           // hssfsheet.addMergedRegion(new Region(3,(short)4,3,(short)5)); // 四个参数分别是：起始行，起始列，结束行，结束列
                            HSSFCell cell4=hssfrow.createCell((short)4);   //创建一个单元格  HSSFCell类表示单元格   
                            cell4.setCellValue(entity.getDh()==null?"":entity.getDh());   //设置单元格内容  
                            cell4.setCellStyle(cs);
                        }
                        if(j == 4){
                            HSSFCell cell2=hssfrow.createCell((short)2);   //创建一个单元格  HSSFCell类表示单元格   
                            cell2.setCellValue(entity.getQxdrs()==null?"":entity.getQxdrs());   //设置单元格内容  
                            cell2.setCellStyle(cs);
                            
                            HSSFCell cell5=hssfrow.createCell((short)5);   //创建一个单元格  HSSFCell类表示单元格   
                            cell5.setCellValue(entity.getQxcl()==null?"":entity.getQxcl());   //设置单元格内容
                            cell5.setCellStyle(cs);
                        }
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }
           }
        }else{
            YwRqQyjyxkRqqxssdjb entity = this.get(qyid);
            if(entity!=null){
            try {
                if(entity == null) return null;
                HSSFRow hssfrow = hssfsheet.getRow(0);// 第一行            
                // 遍历该行所有的行,j表示行数 getPhysicalNumberOfRows行的总数
                for (int j = 2; j < hssfsheet.getPhysicalNumberOfRows(); j++) {
                    hssfrow = hssfsheet.getRow(j);
                    // 判断是否还存在需要导入的数据
                    if (hssfrow == null) {
                        break;
                    }
                    if(j == 2){
                     //   hssfsheet.addMergedRegion(new Region(2,(short)2,2,(short)5)); // 四个参数分别是：起始行，起始列，结束行，结束列 
                        HSSFCell cell1=hssfrow.createCell((short)2);   //创建一个单元格  HSSFCell类表示单元格  // 四个参数分别是：起始行，起始列，结束行，结束列 
                        cell1.setCellValue(entity.getQxdmc()==null?"":entity.getQxdmc());   //设置单元格内容  
                        cell1.setCellStyle(cs);
                    }
                    if(j == 3){
                        HSSFCell cell2=hssfrow.createCell((short)2);   //创建一个单元格  HSSFCell类表示单元格   
                        cell2.setCellValue(entity.getFzr()==null?"":entity.getFzr());   //设置单元格内容  
                        cell2.setCellStyle(cs);
                        
                       // hssfsheet.addMergedRegion(new Region(3,(short)4,3,(short)5)); // 四个参数分别是：起始行，起始列，结束行，结束列
                        HSSFCell cell4=hssfrow.createCell((short)4);   //创建一个单元格  HSSFCell类表示单元格   
                        cell4.setCellValue(entity.getDh()==null?"":entity.getDh());   //设置单元格内容  
                        cell4.setCellStyle(cs);
                    }
                    if(j == 4){
                        HSSFCell cell2=hssfrow.createCell((short)2);   //创建一个单元格  HSSFCell类表示单元格   
                        cell2.setCellValue(entity.getQxdrs()==null?"":entity.getQxdrs());   //设置单元格内容  
                        cell2.setCellStyle(cs);
                        
                        HSSFCell cell5=hssfrow.createCell((short)5);   //创建一个单元格  HSSFCell类表示单元格   
                        cell5.setCellValue(entity.getQxcl()==null?"":entity.getQxcl());   //设置单元格内容
                        cell5.setCellStyle(cs);
                    }
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
            }
        }
        
       
        return hssfsheet;
    }

    public Map importFinalQyData(String acceptNo, Long qyid) {
        List<YwRqQyjyxkRqqxssdjb>  list=getDatas(acceptNo,qyid);
        if(list!=null && list.size()>0){
            List<YwRqQyjyxkFinalRqqxssdjb> datas= getFinalDatas(qyid);
            if(datas!=null && datas.size()>0){
                YwRqQyjyxkFinalRqqxssdjb finalentity=datas.get(0);
                Long id=finalentity.getId();
                 finalentity = new DozerBeanMapper().map(list.get(0), YwRqQyjyxkFinalRqqxssdjb.class);
                 finalentity.setId(id);
                this.rqqxssService.save(finalentity);
            }else{
                YwRqQyjyxkFinalRqqxssdjb entity = new DozerBeanMapper().map(list.get(0), YwRqQyjyxkFinalRqqxssdjb.class);
                entity.setQyid(qyid);
                 entity.setId(null);
                this.rqqxssService.save(entity);
            }
        }
        return null;
    }

    private List<YwRqQyjyxkFinalRqqxssdjb> getFinalDatas(Long qyid){
        String sql=" from "+YwRqQyjyxkFinalRqqxssdjb.class.getName()+" where qyid='"+qyid+"'";
        return this.ywRqQyjyxkRqqxssdjbDao.find(sql);
        
    }
    private List<YwRqQyjyxkRqqxssdjb> getDatas(String acceptNo, Long qyid){
        String sql=" from "+YwRqQyjyxkRqqxssdjb.class.getName()+" where qyid='"+qyid+"' and acceptNo='"+acceptNo+"'";
        return this.ywRqQyjyxkRqqxssdjbDao.find(sql);
    }
}
